package com.qwz.example;


import org.w3c.dom.Element;

import java.util.ArrayList;
import java.util.Collection;

/**
* @Description: 元素作为非终结符对应的解释器，解释并执行中间元素
* @Package com.qwz.example.ElementExpression
* @author Qiuwuzhi
* @date 2019/12/27 10:12
* @version V1.0
*/
public class ElementExpression extends ReadXmlExpression {
    /**
     * 用了记录组合的ReadXmlExpression元素
     */
    private Collection<ReadXmlExpression> collection = new ArrayList<ReadXmlExpression>();
    /**
     * 元素的名称
     */
    private String eleName;

    public ElementExpression(String eleName){
        this.eleName = eleName;
    }

    public boolean addEle(ReadXmlExpression expression){
        this.collection.add(expression);
        return true;
    }

    public boolean removeEle(ReadXmlExpression expression){
        this.collection.remove(expression);
        return true;
    }


    @Override
    public String[] interpreter(Context context) {
        //先取出上下文中的当前元素作为父级元素
        //查找到当前元素名称对应的xml元素，并设置回到上下文中
        Element preEle = context.getPreEle();
        if (preEle==null){
            //说明现在获取的是根元素
            context.setPreEle(context.getDocument().getDocumentElement());
        }else {
            //根据父级元素和要查找的元素的名称来获取当前的元素
            Element nowEle = context.getNowEle(preEle, eleName);
            //把当前获取的元素放到上下文中
            context.setPreEle(nowEle);
        }

        //循环调用子元素的interpreter方法
        String[] ss = null;
        for (ReadXmlExpression expression: collection){
            ss = expression.interpreter(context);
        }

        return ss;
    }
}
